package ormpool

import (
	"regexp"
	"strings"
)

var (
	mysqlRegexp = "^mysql://.*"
	mongoRegexp = "^mongodb://.*"

	mysqlInvalidHeader                = "mysql://"
	mysqlExec          *regexp.Regexp = regexp.MustCompile(mysqlRegexp)
	mongoExec          *regexp.Regexp = regexp.MustCompile(mongoRegexp)
	limitLength                       = 2
)

// getOrmType 根据连接类型，获取对应的orm数据库类型
func getOrmType(source string) Type {
	// 获取mysql正则匹配结果
	mysqlResult := mysqlExec.FindAllString(source, -1)

	// 获取mongo正则匹配结果
	mongodbResult := mongoExec.FindAllString(source, -1)

	// 处理数据类型
	if len(mysqlResult) > 0 {
		return Mysql
	} else if len(mongodbResult) > 0 {
		return MongoDb
	}

	// 返回无效类型
	return InvalidType
}

// GetDSN 获取数据库源连接，直接可以用于进行数据库连接
// 获取出错的场景，返回空字符串，需要在外部额外处理
func GetDSN(source string) (Type, string) {
	// 获取数据库类型
	switch getOrmType(source) {
	case Mysql:
		// 切分多余开头
		dsn := strings.Split(source, mysqlInvalidHeader)

		// dsn形如 mysql:// xxxxxx 一定长度等于2，否则为无效
		if len(dsn) == limitLength {
			return Mysql, dsn[1]
		}
	case MongoDb:
		return MongoDb, source
	}

	return InvalidType, ""
}
